package models;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;

import models.dados.BancoAdapter;
import models.dados.BancoTeste;
import models.dados.DAO;
import models.dados.DadoNaoEncontradoException;
import play.db.jpa.Model;

public class GerenciaClientes extends Model {

	private DAO banco;

	public GerenciaClientes() {
		banco = BancoAdapter.getInstancia();
	}

	public List<Cliente> listarClientes(String nomeUsuario,String nome,Calendar dataCadastro,Calendar dataCadastroInicial,Calendar dataCadastroFinal,boolean bloqueado,boolean naoBloqueado,boolean ehCadastrado,boolean naoCadastrado,String usuarioAdministrador) throws DadoNaoEncontradoException, SQLException {
		Administrador adm = banco.getAdministrador(usuarioAdministrador);
		if (adm.estaAtivo() && adm.getTipo() == TipoUsuario.ADM_SUPER) {
			return banco.listarClientes(nomeUsuario, nome, dataCadastro, dataCadastroInicial, dataCadastroFinal, bloqueado,naoBloqueado, ehCadastrado,naoCadastrado);
		}
		return null;
	}

	public void ativarCliente(String nomeAdministrador, String usuarioCliente,
			boolean ativo) throws DadoNaoEncontradoException {
		Cliente cliente = banco.getClienteCadastrado(usuarioCliente);
		cliente.setAtivo(ativo);
		banco.alterarCliente(cliente);

	}

	public Cliente pesquisarCliente(String usuarioAdministrador,
			String usuarioCliente) throws DadoNaoEncontradoException,
			AcessoNegadoException, SQLException {
		Administrador adm = banco.getAdministrador(usuarioAdministrador);
		if (adm.estaAtivo() && adm.getTipo() == TipoUsuario.ADM_SUPER) {

			return banco.getClienteCadastrado(usuarioCliente);
		} else {
			throw new AcessoNegadoException();
		}
	}

	public void RemoverCliente(String usuarioCliente,
			String usuarioAdministrador) throws DadoNaoEncontradoException, SQLException {
		Administrador adm = banco.getAdministrador(usuarioAdministrador);
		if (adm.estaAtivo() && adm.getTipo() == TipoUsuario.ADM_SUPER)
			banco.removerCliente(usuarioCliente);
	}

}
